图层控制管理
最后更新时间:2019年6月17日
地图是由多个图层按照上下顺序叠加到一起组成的,每个图层都展示一部分的地理信息。例如,用户看到的居民区、绿地区域、水域、道路、兴趣点等等,都可以由单独的图层来展现。图层控制管理包括对地图中图层进行可见性、状态的控制,以及图层的叠加、移动、移除等操作管理。
在实际应用中,我们经常需要隐藏某些叠加在上层的图层,从而来观察下面图层的情况,这时候就需要利用到图层的显示控制,这是一个非常常用且容易实现的功能。图层显示控制功能的核心代码如下所示:
Map map=mapView.getMap(); MapLayer mapLayer=map.getLayer(0); //获取图层可见性 if (mapLayer.getIsVisible()){ mapLayer.setVisible(false); //设置图层隐藏 } else mapLayer.setVisible(true); //设置图层可见
也可利用setState(LayerState State)方法来设置图层状态来控制是否可编辑、是否可见。
在地图显示之后,可以根据需要对地图中的图层进行管理。例如在已有地图中叠加新的图层、移动图层、移除图层。
在移动端加载地图数据,与桌面端类似,当前地图容器(MapView)中只能加载一个地图文档(mapx),并且只能激活打开一个地图(map)。但在实际应用中,可能需要将不同来源的地图数据同时显示,那么就需要使用到地图叠加的功能,本地矢量数据、本地瓦片数据、在线服务地图数据都可以作为图层(Layer)进行叠加。
重要说明:要确保叠加的图层和原有地图的空间参考系一致,这样叠加的效果才能显示正确。
//初始加载离线矢量地图作为底图(Web墨卡托投影坐标系) mapView.loadFromFile(android.os.Environment.getExternalStorageDirectory().getPath() + "/MapGIS Demo/map/WuHan/WuHan.mapx"); //叠加地图 //创建地图服务对象(类型为谷歌影像,同为Web墨卡托投影坐标系) MapServer mapServer = ServerLayer.createMapServer(MapServer.MAPSERVER_TYPE_GOOGLE_SATELLITEMAP); ServerLayer serverLayer = new ServerLayer(); //创建服务图层对象 serverLayer.setMapServer(mapServer); //设置地图服务即数据源 serverLayer.setName("Google服务图层"); //设置图层名称 mapView.getMap().append(serverLayer); //添加图层,叠加地图到顶层 mapView.forceRefresh(); //需要强制刷新地图
实现图层叠加的效果可采用多种方法实现:
接口 | 功能 |
---|---|
append(MapLayer layer) | 添加图层 |
insert(int index, MapLayer layer) | 插入图层 |
dragIn(int index, MapLayer layer) | 拽入图层 |
其中append方法是将图层叠加到地图顶层,显示在最上层;insert和dragIn方法可以将图层插入到地图中的任何位置。
利用图层移动接口方法可以调整图层的压覆顺序,达到图层叠加展示效果的调整。
说明:根据地图组织的规则,图层索引从0开始,索引值越小,越先绘制,显示在越底层;索引值越大,越后绘制,显示在越上层。
mapView.getMap().move(1,2); //将图层从图层索引1移至图层索引2
除此方法外,API程序包com.zondy.mapgis.core.map还提供了其他的接口实现图层移动功能。
接口 | 功能 |
---|---|
move(int fromIndex, int toIndex) | 将图层从索引值fromIndex移至toIndex |
moveToBottom(int index) | 移动图层到最下面(最后绘制) |
moveToDown(int index) | 下移图层 |
moveToTop(int index) | 移动图层到最上面(最先绘制) |
moveToUp(int index) | 上移图层 |
利用图层移除接口可以将图层从地图中移除。
mapView.getMap().remove(1); //根据索引移除图层
达到图层移除的效果可采用多种方法实现:
接口 | 功能 |
---|---|
remove(int index) | 移除索引为index的图层 |
remove(int fromIndex, int count) | 从FromIndex开始移除Count个图层 |
remove(MapLayer layer) | 移除图层 |
removeAll() | 移除所有图层,同时销毁图层 |
dragOut(MapLayer layer) | 移除图层,不会销毁图层 |
说明:移除图层,不会将真正的图层数据删除,只是在当前显示的地图中移除此图层,也可再叠加上。利用remove系列方法移除图层时,会将其MapLayer对象销毁,如果移除后又需要叠加到map中,则MapLayer需要重新构建。dragOut方法移除时不会销毁图层。